package qc.module.qms.api.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import qc.module.qms.dto.station.StationCategoryRelationDto;
import qc.module.qms.dto.station.StationCategoryRelationSetDto;
import qc.module.qms.service.QmsStationCategoryService;
import qc.module.qms.dto.station.StationCategoryDto;
import qc.common.core.utils.StringSplitUtil;

import java.util.Arrays;
import java.util.List;

/**
 * 站点分类Controller
 */
@RestController
@RequestMapping("/stctg")
public class QmsStationCategoryController {

    @Autowired
    private QmsStationCategoryService service;

    /**
     * 获取所有站点分类
     *
     * @return List<StationCategoryDto> 站点分类列表
     */
    @GetMapping("/allctgs")
    public List<StationCategoryDto> getAllCategories() {return service.getAllCategoryFromDb();}

    /**
     * 新增站点分类
     *
     * @param dto 站点分类信息
     * @return String 添加成功返回null，添加失败返回错误信息
     */
    @RequestMapping(value = "/addctg", method = {RequestMethod.POST, RequestMethod.PUT})
    public String addCategory(@RequestBody StationCategoryDto dto) {return service.addCategory(dto);}
    
    /**
     * 更新站点分类信息
     *
     * @param dto 站点分类信息
     * @return String 更新成功返回null，更新失败返回错误信息
     */
    @RequestMapping(value = "/updatectg", method = {RequestMethod.POST, RequestMethod.PUT})
    public String updateCategory(@RequestBody StationCategoryDto dto) {return service.updateCategory(dto);}
    
    /**
     * 删除站点分类
     *
     * @param id 站点分类编码
     * @return String 删除成功返回null，删除失败返回错误信息
     */
    @DeleteMapping("/deletectg")
    public String deleteCategoryByParam(@RequestParam String id) {
        service.cacheEvict();
        String result = service.deleteCategory(id);
        if (result == null) {service.cachePut();}
        return result;}
    
    /**
     * 删除站点分类
     *
     * @param id 站点分类编码
     * @return String 删除成功返回null，删除失败返回错误信息
     */
    @DeleteMapping("/deletectg/{id}")
    public String deleteCategoryByPath(@PathVariable String id) {
        service.cacheEvict();
        String result = service.deleteCategory(id);
        if (result == null) {service.cachePut();}
        return result;}
    
    /**
     * 获取站点分类下的站点
     *
     * @param id 站点分类编码
     * @return List<StationCategoryRelationDto> 站点分类下的站点列表
     */
    @GetMapping("/ctgstations")
    public List<StationCategoryRelationDto> getCategoryStationsByParam(@RequestParam String id) {return service.getCategoryStations(id);}
    
    /**
     * 获取站点分类下的站点
     *
     * @param id 站点分类编码
     * @return List<StationCategoryRelationDto> 站点分类下的站点列表
     */
    @GetMapping("/ctgstations/{id}")
    public List<StationCategoryRelationDto> getCategoryStationsByPath(@PathVariable String id) {return service.getCategoryStations(id);}
    
    /**
     * 设置站点分类下的站点
     *
     * @param dto 站点分类下的站点信息
     * @return String 设置成功返回null，设置失败返回错误信息
     */
    @RequestMapping(value = "/setctgstations", method = {RequestMethod.POST, RequestMethod.PUT})
    public String setCategoryStations(@RequestBody StationCategoryRelationSetDto dto) {return service.setCategoryStations(dto);}

    /**
     * 新增分类中关联的站点
     * 
     * @param dto 站点分类关联设置DTO
     * @return String 添加成功返回null，添加失败返回错误信息
     */
    @RequestMapping(value = "/addctgstations", method = {RequestMethod.POST, RequestMethod.PUT})
    public String addCategoryStations(@RequestBody StationCategoryRelationSetDto dto) {return service.addCategoryStations(dto);}

    /**
     * 删除分类与站点关联
     * 
     * @param id 关联关系ID，可以为多个，用逗号分隔
     * @return String 删除成功返回null，删除失败返回错误信息           
     */
    @DeleteMapping("/deletectgstations")
    public String deleteCategoryStationsByParam(@RequestParam String id) {List<String> ids = Arrays.asList(StringSplitUtil.Split(id, true));
        return service.deleteCategoryStations(ids);}

    /**
     * 删除分类与站点关联
     * 
     * @param id 关联关系ID，可以为多个，用逗号分隔
     * @return String 删除成功返回null，删除失败返回错误信息           
     */
    @DeleteMapping("/deletectgstations/{id}")
    public String deleteCategoryStationsByPath(@PathVariable String id) {List<String> ids = Arrays.asList(StringSplitUtil.Split(id, true));
        return service.deleteCategoryStations(ids);}

    /**
     * 设置分类与站点关联排序号
     * 
     * @param dto 分类与站点关联关系DTO
     * @return String 设置成功返回null，设置失败返回错误信息           
     */
    @RequestMapping(value = "/odrctgstation", method = {RequestMethod.POST, RequestMethod.PUT})
    public String setCategoryStationOrder(@RequestBody StationCategoryRelationDto dto) {return service.setCategoryStationOrder(dto);}

}
